package memento

/*
备忘录模式是一种行为设计模式， 允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。
备忘录模式让我们可以保存对象状态的快照。 你可使用这些快照来将对象恢复到之前的状态。
这在需要在对象上实现撤销-重做操作时非常实用。

备忘录模式将创建状态快照 （Snapshot） 的工作委派给实际状态的拥有者原发器 （Originator） 对象。
    这样其他对象就不再需要从 “外部” 复制编辑器状态了， 编辑器类拥有其状态的完全访问权， 因此可以自行生成快照。


模式建议将对象状态的副本存储在一个名为备忘录 （Memento） 的特殊对象中。
    除了创建备忘录的对象外， 任何对象都不能访问备忘录的内容。
其他对象必须使用受限接口与备忘录进行交互， 它们可以获取快照的元数据 （创建时间和操作名称等），
    但不能获取快照中原始对象的状态。

这种限制策略允许你将备忘录保存在通常被称为负责人 （Caretakers） 的对象中



备忘录模式优缺点
你可以在不破坏对象封装情况的前提下创建对象状态快照。
    你可以通过让负责人维护原发器状态历史记录来简化原发器代码。
如果客户端过于频繁地创建备忘录， 程序将消耗大量内存。
    负责人必须完整跟踪原发器的生命周期， 这样才能销毁弃用的备忘录。
    绝大部分动态编程语言 （例如 PHP、 Python 和 JavaScript） 不能确保备忘录中的状态不被修改。
    与其他模式的关系


*/

// 备忘录 （Memento） 是原发器状态快照的值对象 （value object）。
// 通常做法是将备忘录设为不可变的， 并通过构造函数一次性传递数据。

type Memento struct {
	state string
}

func (m *Memento) GetSavedState() string {
	return m.state
}
